#include <iostream>
#include <string>
#include <mutex>
#include <thread>

using namespace std;

class TestParams
{

public:
	TestParams(/* args */);
	~TestParams();

	int i;
	string str;

};

TestParams::TestParams(/* args */)
	:i(101), str("test params")
{
}

TestParams::~TestParams()
{
}


void func_int(int i) {
	cout << "print int:\t" << i << endl;
}

void func_string(string str) {
	cout << "print str:\t" << str << endl;
}

void func_params(int i, string str) {
	cout << "print int:\t" << i << "\t";
	cout << "print str:\t" << str << endl;
}

void func_class(TestParams in) {
	cout << in.i << "\t" << in.str << "\t" << endl;
}

int main() {
	
	thread thread_int(func_int, 10);

	thread thread_str(func_string, "thread string");

	thread thread_params(func_params, 11, "thread parameters");

	thread thread_calss(func_class, TestParams());

	thread_int.join();
	thread_str.join();
	
	thread_params.join();

	thread_calss.join();

	return 0;
}
